home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 25 / Cream of the Crop 25.iso / program / tcpdumpb.zip / print-ppp.c < prev    next >
C/C++ Source or Header  |  1997-04-14  |  3KB  |  110 lines

  1. /*
  2.  * Copyright (c) 1990, 1991, 1993, 1994, 1995, 1996
  3.  *      The Regents of the University of California.  All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that: (1) source code distributions
  7.  * retain the above copyright notice and this paragraph in its entirety, (2)
  8.  * distributions including binary code include the above copyright notice and
  9.  * this paragraph in its entirety in the documentation or other materials
  10.  * provided with the distribution, and (3) all advertising materials mentioning
  11.  * features or use of this software display the following acknowledgement:
  12.  * ``This product includes software developed by the University of California,
  13.  * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
  14.  * the University nor the names of its contributors may be used to endorse
  15.  * or promote products derived from this software without specific prior
  16.  * written permission.
  17.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
  18.  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  19.  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  20.  */
  21.  
  22. #ifndef lint
  23. static  char rcsid[] =
  24.         "@(#)$Header: print-ppp.c,v 1.22 96/07/14 19:39:03 leres Exp $ (LBL)";
  25. #endif
  26.  
  27. #ifdef PPP
  28. #include <sys/param.h>
  29. #include <sys/time.h>
  30. #include <sys/socket.h>
  31. #include <sys/file.h>
  32. #include <sys/ioctl.h>
  33.  
  34. #if __STDC__
  35. struct mbuf;
  36. struct rtentry;
  37. #endif
  38. #include <net/if.h>
  39.  
  40. #include <netinet/in.h>
  41. #include <netinet/in_systm.h>
  42. #include <netinet/ip.h>
  43.  
  44. #include <ctype.h>
  45. #include <netdb.h>
  46. #include <pcap.h>
  47. #include <signal.h>
  48. #include <stdio.h>
  49.  
  50. #include "interface.h"
  51. #include "addrtoname.h"
  52.  
  53. /* XXX This goes somewhere else. */
  54. #ifdef __EMX__
  55. #define PPP_HDRLEN 0
  56. #else
  57. #define PPP_HDRLEN 4
  58. #endif
  59.  
  60. void
  61. ppp_if_print(u_char *user, const struct pcap_pkthdr *h,
  62.              register const u_char *p)
  63. {
  64.         register u_int length = h->len;
  65.         register u_int caplen = h->caplen;
  66.         const struct ip *ip;
  67.  
  68.         ts_print(&h->ts);
  69.  
  70.         if (caplen < PPP_HDRLEN) {
  71.                 printf("[|ppp]");
  72.                 goto out;
  73.         }
  74.  
  75.         /*
  76.          * Some printers want to get back at the link level addresses,
  77.          * and/or check that they're not walking off the end of the packet.
  78.          * Rather than pass them all the way down, we set these globals.
  79.          */
  80.         packetp = p;
  81.         snapend = p + caplen;
  82.  
  83.         if (eflag)
  84.                 printf("%c %4d %02x %04x: ", p[0] ? 'O' : 'I', length,
  85.                        p[1], ntohs(*(u_short *)&p[2]));
  86.  
  87.         length -= PPP_HDRLEN;
  88.         ip = (struct ip *)(p + PPP_HDRLEN);
  89.         ip_print((const u_char *)ip, length);
  90.  
  91.         if (xflag)
  92.                 default_print((const u_char *)ip, caplen - PPP_HDRLEN);
  93. out:
  94.         putchar('\n');
  95. }
  96. #else
  97. #include <sys/types.h>
  98. #include <sys/time.h>
  99.  
  100. #include <stdio.h>
  101.  
  102. #include "interface.h"
  103. void
  104. ppp_if_print(u_char *user, const struct pcap_pkthdr *h, const u_char *p)
  105. {
  106.         error("not configured for ppp");
  107.         /* NOTREACHED */
  108. }
  109. #endif
  110.